package com.doordu.soa.service.web.fieldvalidator;

import java.io.InputStream;
import java.sql.ResultSet;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class ExcelUtil {
	/**
	 * 把数据填充Excel表格
	 * @param rs
	 * @param wb
	 * @param headers
	 * @throws Exception
	 */
	public static void fillExcelData(ResultSet rs,Workbook wb,String[] headers)throws Exception{
		int rowIndex=0;//行索引
		Sheet sheet=wb.createSheet();//创建一个sheet页
		Row row=sheet.createRow(rowIndex++);//创建行
		//把表头塞进execl
		for(int i=0;i<headers.length;i++){
			row.createCell(i).setCellValue(headers[i]);
		}
		//塞数据,遍历行
		while(rs.next()){
			//创建行
			row=sheet.createRow(rowIndex++);
			//遍历列
			for(int i=0;i<headers.length;i++){
				//创建单元格并赋值,jdbc是从1开始的
				row.createCell(i).setCellValue(rs.getObject(i+1).toString());
			}
		}
	}
	/**
	 * 使用模板导出数据
	 * @param rs
	 * @param templateFileName
	 * @return
	 * @throws Exception
	 */
	public static Workbook fillExcelDataWithTemplate(ResultSet rs,String templateFileName)throws Exception{
		//以流的形式读取数据
		InputStream inp=ExcelUtil.class.getResourceAsStream("/com/java1234/template/"+templateFileName);
		//poi文件流
		POIFSFileSystem fs=new POIFSFileSystem(inp);
		Workbook wb=new HSSFWorkbook(fs);
		Sheet sheet=wb.getSheetAt(0);//获取第一个模板第一个sheet页
		// 获取列数
		int cellNums=sheet.getRow(0).getLastCellNum();
		int rowIndex=1;//第二行开始，因为模板已有表头
		while(rs.next()){
			Row row=sheet.createRow(rowIndex++);
			for(int i=0;i<cellNums;i++){
				row.createCell(i).setCellValue(rs.getObject(i+1).toString());
			}
		}
		return wb;//返回一个工作薄
	}
	/**
	 * 判断类型，可以根据具体再添加
	 * @param hssfCell
	 * @return 返回String类型
	 */
	public static String formatCell(HSSFCell hssfCell){
		//传入列
		if(hssfCell==null){
			return "";
		}else{
			//如果是boolean类型
			if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){
				return String.valueOf(hssfCell.getBooleanCellValue()).trim();
			//如果是num类型
			}else if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
				return String.valueOf(hssfCell.getNumericCellValue()).trim();
			}else{
				return String.valueOf(hssfCell.getStringCellValue()).trim();
			}
		}
	}
}
